import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model

# 读取数据集
# 存储数据中的房屋尺寸和房屋成交价格
datasets_X = []
datasets_Y = []
fr = open('prices.txt', 'r')
# 一次读取整个文件
lines = fr.readlines()
# 逐行进行操作，循环遍历所有数据
for line in lines:
    # 去除数据文件中的逗号
    items = line.strip().split(',')
    datasets_X.append(int(items[0]))
    datasets_Y.append(int(items[1]))

length = len(datasets_X)
# 将datasets_X转化为数组， 并变为二维
datasets_X = np.array(datasets_X).reshape([length, 1])
datasets_Y = np.array(datasets_Y)

minX = min(datasets_X)
maxX = max(datasets_X)
# 以数据datasets_X的最大值和最小值为范围，建立等差数列，方便后续画图
X = np.arange(minX, maxX).reshape([-1, 1])
# 调用线性回归模块，建立回归方程，拟合数据
#  fit_intercept : 布尔型参数，表示是否计算该模型截距。可选参数。
#  normalize : 布尔型参数，若为True，则X在回归前进行归一化。可选参数。默认值为False。
#  copy_X : 布尔型参数，若为True，则X将被复制；否则将被覆盖。可选参数。默认值为True。
#  n_jobs : 整型参数，表示用于计算的作业数量；若为-1，则用所有的CPU。可选参数。默认值为1。
linear = linear_model.LinearRegression()
# X为训练向量
# y为相对于X的目标向量
# sample_weight=None : 分配给各个样本的权重数组，一般不需要使用，可省略
linear.fit(datasets_X, datasets_Y)

# 查看回归方程系数
print('Coefficients:', linear.coef_)
# 查看回归方程截距
print('intercept:', linear.intercept_)

# 图像中显示
plt.scatter(datasets_X, datasets_Y, color='red')
plt.plot(X, linear.predict(X), color='blue')
plt.xlabel('Area')
plt.ylabel('Price')
plt.show()
